home *** CD-ROM | disk | FTP | other *** search
-
- /***** Include vari *****/
-
- #include "/triton/ped/Ped.h"
- #include <strings.h>
- #include <math.h>
-
-
- /***** Prototipi delle due funzioni che si trovano in fondo al programma.
- Cio' e' necessario per far si che la funzione principale sia la
- prima nel codice! *****/
-
- struct Line *MySearchLine( struct Line * , int );
- char *mystrstr( char * , char * );
-
-
-
- /*****
- *
- * FUNZIONE: ULONG main(struct PEDWindow *p,LONG ccol,LONG cline,ULONG *start,ULONG *end,char *funcname)
- *
- * SCOPO: Cerca un blocco racchiuso dalle stringhe iniziali e finali
- * definite dall'utente e che si trovi a livello 0 (non
- * racchiuso da un altro blocco dello stesso tipo).
- *
- * NOTA: Utilizza SEMPRE la funzione geta4() o la direttiva __saveds!
- *
- * RESTITUISCE: TRUE=blocco trovato,FALSE=non trovato.
- *
- ****/
-
- ULONG ASM SAVEDS main(RG(a0) struct PEDWindow *p,RG(d0) LONG ccol,RG(d1) LONG cline,RG(a1) ULONG *start,RG(a2) ULONG *end,RG(a3) char *funcname)
- {
- struct Line *line,
- *curstartline;
- int nline,
- startline;
- char *pun,
- *pun2,
- *name;
-
-
-
- /***** Scorri dal cursore in su per capire a che livello siamo *****/
-
- curstartline=line=MySearchLine(p->Text->FirstLine,cline);
- nline=cline;
- while(line)
- {
- /***** Se trovo un FOLD certamente non c'e' nulla sopra *****/
- if (line->Folder)
- {
- line=NULL;
- break;
- }
-
- /***** Se c'e' la stringa esci! *****/
- if (name=mystrstr(line->Buffer,p->Text->FileType->FoldStartStr)) break;
-
- /***** Passiamo alla linea precedente *****/
- line=line->PrevLine;
- nline--;
- }
-
- /***** Se non hai trovato la linea ritorna a mani vuote *****/
- if (!line) return(FALSE);
-
- /***** Abbiamo trovato l'inizio del blocco. Memorizza la posizione in startline *****/
- startline=nline;
-
- /***** Partiamo di nuovo dal punto iniziale e scorriamo verso il basso
- fino a scendere al livello 0 (dove termina il blocco). *****/
- line=curstartline->NextLine;
- nline=cline+1;
- while(line)
- {
- /***** Se trovo un FOLD certamente non c'e' nulla sotto *****/
- if (line->Folder)
- {
- line=NULL;
- break;
- }
-
- /***** Se c'e' la stringa esci! *****/
- if (mystrstr(line->Buffer,p->Text->FileType->FoldStopStr)) break;
-
- /***** Passiamo alla linea successiva *****/
- line=line->NextLine;
- nline++;
- }
-
- /***** Se line==NULL allora non c'e' il finale!!!!!!!!!!!!!! *****/
- if (!line) return(FALSE);
-
- /***** Abbiamo trovato anche la fine del blocco. Memorizza le righe
- iniziali e finali del blocco nelle LONG a cui puntato i
- parametri "start" ed "end". *****/
- *start=startline;
- *end=nline;
-
- /***** Vai avanti fino alla fine copiando il nome della funzione *****/
-
- pun=funcname;
- pun2=name+strlen(p->Text->FileType->FoldStartStr);
- while((pun2[0]==32)||(pun2[0]==9)) pun2++;
- while((pun2[0]!=32)&&(pun2[0]!=9)&&(pun2[0])) *pun++=*pun2++;
- *pun='\0';
-
- /***** Ritorna TRUE *****/
- return(TRUE);
- }
-
-
-
- /*****
- *
- * FUNZIONE: struct Line *MySearchLine(struct Line *line,int y)
- *
- * SCOPO: Cerca l'indirizzo della linea "y-esima" (0=prima) a partire
- * dalla prima linea del file data da line.
- * NB: NON tiene conto dei FOLDS.
- *
- * RESTITUISCE: Un puntatore alla linea cercata.
- *
- ****/
-
- struct Line *MySearchLine(struct Line *line,int y)
- {
- while(((y--)>0)&&(line)) line=line->NextLine;
- return(line);
- }
-
-
-
- /*****
- *
- * FUNZIONE: char *mystrstr(char *str,char *sub)
- *
- * SCOPO: Cerca la stringa "sub" all'interno della stringa "str"
- * a partire da destra.
- *
- * RESTITUISCE: l'indirizzo della sottostringa in "str".
- *
- ****/
-
- char *mystrstr(char *str,char *sub)
- {
- int lstr,
- lsub;
- char *p,
- *q,
- *r;
-
- lstr=strlen(str);
- lsub=strlen(sub);
-
- for(p=str;p<=str+lstr-lsub;p++)
- {
- q=p;
- r=sub;
- while(*r)
- {
- if (*r!=*q) break;
- r++;
- q++;
- }
- if (!(*r)) return(p);
- }
- return(NULL);
- }
-